/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package yahoofinances;

import Monitores.MonitorFicherosDescargados;
import Monitores.MonitorValoresADescargar;
import Monitores.MonitorValoresBdToPDF;
import Threads.ThreadDescarga;
import Threads.ThreadEscrituraBD;
import Threads.ThreadEscrituraPDF;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import utilidades.GestorBD;
import utilidades.LectorValores;

/**
 *
 * @author felipe
 */
public class YahooFinances {

    private static int nThreadsValores;
    private static int nThreadsBD;
    private static int nThreadsPDF;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        ingresarDatos();
        baseDeDatos();

        MonitorValoresADescargar monitorValoresADescargar = new MonitorValoresADescargar();
        MonitorValoresBdToPDF monitorValoresBdToPDF = new MonitorValoresBdToPDF(nThreadsPDF);
        MonitorFicherosDescargados monitorFicherosDescargados = new MonitorFicherosDescargados();

        LectorValores lectorValores = new LectorValores(monitorValoresADescargar, monitorValoresBdToPDF);
        monitorValoresBdToPDF.setProduccion(lectorValores.leerValoresAPDF());
        monitorFicherosDescargados.setProduccion(lectorValores.leerValoresADescargar());

        //CREAMOS E INICIAMOS THREADS PARA DESCARGAS, ESCRITURA EN BD,
        //ESCRITURA EN PDF, ZIP Y MAIL.
        for (int i = 0; i < nThreadsValores; i++) {
            Thread td = new Thread(new ThreadDescarga(monitorValoresADescargar, monitorFicherosDescargados));
            td.start();
        }
        for (int i = 0; i < nThreadsBD; i++) {
            Thread tebd = new Thread(new ThreadEscrituraBD(monitorFicherosDescargados, monitorValoresBdToPDF));
            tebd.start();
        }
        for (int i = 0; i < nThreadsPDF; i++) {
            Thread tepdf = new Thread(new ThreadEscrituraPDF(monitorValoresBdToPDF));
            tepdf.start();
        }
    }

    private static void ingresarDatos() {
        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            while (nThreadsValores <= 0) {
                System.out.print("\nNº de threads para leer las cotizaciones de los valores de yahoo finance: ");
                nThreadsValores = Integer.parseInt(br.readLine());
            }
            while (nThreadsBD <= 0) {
                System.out.print("\nNº de threads para guardar las cotizaciones en base de datos: ");
                nThreadsBD = Integer.parseInt(br.readLine());
            }
            while (nThreadsPDF <= 0) {
                System.out.print("\nNº de threads para generar los pdfs: ");
                nThreadsPDF = Integer.parseInt(br.readLine());
            }
        } catch (IOException ex) {
            Logger.getLogger(YahooFinances.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private static void baseDeDatos() {
        GestorBD conexion = new GestorBD();
        conexion.abrir();
        conexion.insertarYBorrarLinea_s("DELETE FROM FINANCES WHERE VOLUMEN >= 0");
        conexion.cerrar();
    }
}